#!/usr/bin/env python3
"""
雅言校验器
功能：检查文言注释规范性
"""

import re
import sys

class 雅言校验器:
    def __init__(self):
        self.违例列表 = []
        
        # 违例规则：现代白话词汇
        self.现代词汇 = [
            '计算', '获取', '进行', '操作', '功能', '参数',
            '返回', '如果', '那么', '否则', '但是', '所以'
        ]
        
        # 允用术语：技术英文缩写
        self.技术术语 = [
            'API', 'SQL', 'HTML', 'PDF', 'CSS', 'JSON',
            'XML', 'HTTP', 'URL', 'CPU', 'GPU', 'RAM'
        ]
    
    def 校验文件(self, 文件路径):
        """校验单个文件的文言注释"""
        with open(文件路径, 'r', encoding='utf-8') as f:
            内容 = f.read()
        
        # 提取所有注释
        注释块 = re.findall(r'"""(.*?)"""', 内容, re.DOTALL)
        
        for 注释 in 注释块:
            self.校验注释(注释, 文件路径)
        
        return len(self.违例列表) == 0
    
    def 校验注释(self, 注释, 文件路径):
        """校验单个注释块"""
        行号 = 1
        
        for 行 in 注释.split('\n'):
            # 检查现代词汇
            for 词汇 in self.现代词汇:
                if 词汇 in 行:
                    self.违例列表.append({
                        '文件': 文件路径,
                        '行号': 行号,
                        '违例': f"使用现代词汇: {词汇}",
                        '内容': 行.strip()
                    })
            
            # 检查句式长度（避免过长现代句式）
            if len(行.strip()) > 50 and '：' not in 行:
                self.违例列表.append({
                    '文件': 文件路径,
                    '行号': 行号,
                    '违例': "句式过长，建议分句",
                    '内容': 行.strip()
                })
            
            行号 += 1
    
    def 输出报告(self):
        """输出校验报告"""
        if not self.违例列表:
            print("雅言校验通过！")
            return True
        
        print(f"发现 {len(self.违例列表)} 处违例:")
        for 违例 in self.违例列表:
            print(f"{违例['文件']}:{违例['行号']} - {违例['违例']}")
            print(f"  内容: {违例['内容']}")
            print()
        
        return False

def main():
    if len(sys.argv) < 2:
        print("用法: python check_wenyan.py <文件路径>")
        sys.exit(1)
    
    校验器 = 雅言校验器()
    通过 = True
    
    for 文件路径 in sys.argv[1:]:
        if not 校验器.校验文件(文件路径):
            通过 = False
    
    if not 校验器.输出报告():
        sys.exit(1)

if __name__ == '__main__':
    main()